In today's rapidly moving software field many applications are programmed specifically for the operating system in use at the time the application is developed. While programming specifications are typically provided to application developers by the operating system developers, sometimes these procedures and rules are not followed. As a result, many applications may not work correctly under a new release of an operating system. This can result from many different factors, including application developers' not following the programming specifications provided by the operating system developers or application developers' making assumptions about how the operating system operates which turn out to be incorrect. For example, an application developer may believe that a certain type of file is always stored at a specific location in the computer, and, instead of requesting the location of the file from a function in the operating system, as the programming specifications indicate, the programmer will, contrary to the teaching of the programming specification, specifically input the path of the file location into the application code. Additionally, a programmer may rely on the fact that a certain function of the existing operating system only returns a certain value if an error occurs within that function, which may not be true in a new or new version of the operating system. For example, if previous versions of the operating system returned a value of negative one to indicate an error, a programmer may assume that only a negative one value will be returned in the future. An operating system change, however, may have modified the function to return other values based on the error, thereby potentially causing the program to not work correctly in all situations under the operating system.
In other instances, a program may seem to operate correctly under one version of an operating system even though it contains errors. This can occur when the older version of the operating system does not detect or enforce the error contained within the application. A new release of the operating system, however, may check for these previously unchecked conditions, thereby causing the application to be incompatible with the new version of the operating system.
The problem of incompatible applications also increases as the popularity of the operating system increases. For example, if an operating system has become popular during its release, there will be thousands of applications written specifically for that operating system. The large number of applications, as well as the diverse group of application developers, can result in many programs not working correctly when a new version of an operating system is released.
Users of currently working applications may not want to switch to a newer operating system if their applications are incompatible with the new operating system. To attempt to solve this problem, application developers have been required to fix their applications themselves, or operating system developers have included patches that are integrated into the new version of the operating system to fix many of the known problem applications so that they will function correctly under the new operating system.
The operating system patch approach, however, creates many problems. First, patches may add a significant amount of code to the operating system that may significantly increase the space requirements of the operating system. Second, with patches, all applications are required to operate through this additional patch layer even though many applications are compatible with the new operating system and thus do not need the patches to properly operate. This can cause programs to run slower. Third, the operating system programming code may become very cluttered due to the number of programs that may need to be fixed. This cluttered code makes it more difficult for operating system developers to change and improve the operating system. Finally, it is impossible for an operating system developer to know all of the applications that exist that will not work correctly when the new operating system is first released. Therefore, subsequent patches must be made to the operating system in order to allow these programs to work correctly. This in turn adds another layer to the already complex operating system causing the operating system to operate in a less efficient manner.